package Analizadores;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectOutputStream;

import Analizadores.Estructuras.TokenList;


public class Analizador {

        private AnalizadorLexico al;
        private AnalizadorSintactico as;
       
        public Analizador(FileInputStream input) throws IOException{
                al = new AnalizadorLexico(input);
                //llamamos a la funcion y si todo ha sido satisfactorio, pasamos la lista de tokens al 
                //sintactico, sino mostramos todos los errores por pantalla y abortamos la ejecucion.
                if (al.parser()){
                	TokenList lista = al.getLista();
                	System.out.println("LISTA: " + lista);
                    as = new AnalizadorSintactico(lista); 
                }
                else{
                	System.out.println("Existen errores en el programa. Ejecuci�n abortada");
                	System.exit(1);
                }
                         
        }
       
        public void procesar() throws IOException{
               
                as.procesar();//ejecutamos el analizador semantico
        }
        //Obtenemos el nombre del fichero donde volcar el codigo generado por los analizadores
        // y lo guardamos en bytecode
        public void generarCodObjeto(String f) throws IOException, ClassNotFoundException{
        		FileWriter file=new FileWriter(f);    
        		String salida = as.getCodigo();
                file.write(salida);
                file.close();
                //en bytecode
                FileOutputStream fos = new FileOutputStream("bytes");
            	ObjectOutputStream oos = new ObjectOutputStream(fos);
            	oos.writeObject(salida);
            	oos.close();
               
        }
}

